const fs = require('fs')

let rs = fs.createReadStream('./test.txt', {
  flags: 'r',
  encoding: null, // Buffer
  fd: null,
  mode: 438,
  autoClose: true,
  start: 0,
  //   end: 3,
  highWaterMark: 4, // 每次最多读取的长度
})

// 可写流和可读流都有自己的缓冲, 缓冲大小由构造参数 highWaterMark 决定

// ------------------------------ 流动模式: 自动触发
// rs.on('data', (chunk) => {
//   // 通过上面的配置, start-0, end-3, highWaterMark- 2: 每次读取2个
//   console.info(chunk.toString())
//   rs.pause()
//   setTimeout(() => {
//     rs.resume()
//   }, 1000)
// })

// ------------------------------ readable模式: 手动触发
// rs.on('readable', () => {
//   let data
//   while ((data = rs.read(1)) !== null) {
//     console.info(data.toString())
//     console.info('----------------------', rs._readableState.length)
//     /**
//      *  1
//         ---------------------- 3
//         2
//         ---------------------- 2
//         3
//         ---------------------- 1
//         4
//         ---------------------- 0
//         5
//         ---------------------- 3
//         6
//         ---------------------- 2
//         7
//         ---------------------- 1
//         8
//         ---------------------- 0
//         9
//         ---------------------- 1
//         0
//         ---------------------- 0
//      */
//   }
// })

rs.on('open', (fd) => {
  console.info('文件被打开了', fd) // 3
})

rs.on('close', () => {
  console.info('文件被关闭了') // 3
})

let bufferArr = []
rs.on('data', (chunk) => {
  //   console.info(chunk)
  bufferArr.push(chunk)
})

// 数据被清空之后
rs.on('end', () => {
  console.info(Buffer.concat(bufferArr).toString())
  console.info('数据读取完毕!')
})

rs.on('error', (err) => {
  console.info('出错了!', err)
})
